package com.yootk.test.hc;

import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.entity.UrlEncodedFormEntity;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.Header;
import org.apache.hc.core5.http.NameValuePair;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.apache.hc.core5.http.message.BasicNameValuePair;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

/**
 * HttpClient基本使用
 */
public class HttpClientPostDemo {

    public static void main(String[] args) throws Exception {
        String requestUrl = "http://localhost/echo.action"; // 请求路径
        // 1、创建一个可以被关闭的HttpClient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 2、创建一个指定的请求模式，本次为POST模式
        HttpPost httpPost = new HttpPost(requestUrl); // 以POST模式发送HTTP请求
        // 3、如果要想进行POST请求发送，那么一定要进行请求参数的配置，需要配置集合
        List<NameValuePair> allParams = new ArrayList<>(); // 通过集合保存提交参数
        allParams.add(new BasicNameValuePair("msg", "沐言科技：www.yootk.com")); // 添加一个参数
        // 4、既然要通过POST发送请求，那么就需要进行编码的配置
        UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(allParams, Charset.forName("UTF-8"));
        // 5、将请求参数配置到POST请求之中
        httpPost.setEntity(urlEncodedFormEntity); // 所有的提交参数准备就绪
        // 6、进行HTTP请求的发送，请求发送之后一定会存在有响应信息
        CloseableHttpResponse response = httpClient.execute(httpPost); // 发送HTTP请求
        // 7、HTTP响应是分为两个部分：数据部分、头信息
        System.out.println("【获取响应数据】" + EntityUtils.toString(response.getEntity()));
        // 8、获取全部的头信息数据
        Header headers [] = response.getHeaders(); // 全部头信息
        for (Header header : headers) {
            System.out.println("\t|- 【头信息】name = " + header.getName() + "、value = " + header.getValue());
        }
        System.out.println("【HTTP状态码】" + response.getCode());
    }
}
